package com.bosssoft.promotions.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bosssoft.base.entity.BaseEntity;
import com.bosssoft.promotions.dao.CouponDao;
import com.bosssoft.promotions.dao.UserCouponDao;
import com.bosssoft.promotions.domain.dto.CouponDTO;
import com.bosssoft.promotions.domain.dto.CouponQueryDTO;
import com.bosssoft.promotions.domain.dto.QualifiedCouponQueryDTO;
import com.bosssoft.promotions.domain.po.Coupon;
import com.bosssoft.promotions.domain.po.UserCoupon;
import com.bosssoft.promotions.service.CouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class CouponImpl implements CouponService {

    @Autowired
    private UserCouponDao userCouponDao;
    @Autowired
    private CouponDao couponDao;

    BaseEntity baseEntity = new BaseEntity();

    /*
    * 添加用户的优惠券
    * 待解决
    */
    @Override
    public void add(QualifiedCouponQueryDTO qualifiedCouponQueryDTO) {
        Date date = new Date();
        UserCoupon userCoupon = new UserCoupon();
        userCoupon.setCouponId(qualifiedCouponQueryDTO.getCouponId());
        userCoupon.setUserId(qualifiedCouponQueryDTO.getUserId());
        userCoupon.setMount("1");
        userCoupon.setStatus("0");
        userCoupon.setTime(date);
        userCoupon.setVersion(12L);
        userCouponDao.insert(userCoupon);
    }

    /*减少优惠券 */
    @Override
    public void reduce(QualifiedCouponQueryDTO qualifiedCouponQueryDTO) {
        userCouponDao.delete(new QueryWrapper<UserCoupon>()
                .eq("user_id",qualifiedCouponQueryDTO.getUserId())
                .eq("coupon_id",qualifiedCouponQueryDTO.getCouponId())
        );
    }

    /*
     * 查询当前用户优惠券
     */
    @Override
    public List<Coupon> QueryAllPageCoupon(String userId) {
        List<UserCoupon> userCoupons = userCouponDao.selectList(new QueryWrapper<UserCoupon>()
                .eq("user_id",userId));
        List<Coupon> coupons = new ArrayList<>();
        for(UserCoupon userCoupon:userCoupons) {
            coupons.add(couponDao.selectById(new QueryWrapper<UserCoupon>()
                    .eq("coupon_id",userCoupon.getCouponId())
            ));
        }
        return coupons;
    }

    @Override
    public List<Coupon> queryQualifiedCoupon(QualifiedCouponQueryDTO qualifiedCouponQueryDTO){
        List<UserCoupon> userCoupons = userCouponDao.selectList(new QueryWrapper<UserCoupon>()
                .eq("user_id",qualifiedCouponQueryDTO.getUserId()));
        List<Coupon> coupons = new ArrayList<>();
        for(UserCoupon userCoupon:userCoupons) {
            coupons.add(couponDao.selectOne(new QueryWrapper<Coupon>()
                    .eq("coupon_id", userCoupon.getCouponId())
                    .le("threshold", qualifiedCouponQueryDTO.gettotalPrice())
            ));
        }
        return coupons;
    }




    @Override
    public boolean addCoupon(CouponDTO couponDTO) {
        Date date = new Date();
        Coupon coupon = new Coupon();
        coupon.setCouponId(couponDTO.getCouponId());
        coupon.setCouponName(couponDTO.getCouponName());
        coupon.setCreateTime(date);
        coupon.setBeginTime(couponDTO.getBeginTime());
        coupon.setEndTime(couponDTO.getEndTime());
        coupon.setDiscountPrice(couponDTO.getDiscountPrice());
        coupon.setThreshold(couponDTO.getThreshold());
        coupon.setMount(couponDTO.getMount());
        coupon.setStatus("0");
        coupon.setType(couponDTO.getType());
        boolean justice = couponDao.insert(coupon)==1 ?  true: false;
        return justice;
    }

    @Override
    public boolean updateCoupon(CouponDTO couponDTO) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");

        UpdateWrapper<Coupon> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("coupon_id", couponDTO.getCouponId());

        Coupon coupon = new Coupon();
        coupon.setCouponName(couponDTO.getCouponName());
        coupon.setBeginTime(couponDTO.getBeginTime());
        coupon.setEndTime(couponDTO.getEndTime());
        coupon.setDiscountPrice(couponDTO.getDiscountPrice());
        coupon.setThreshold(couponDTO.getThreshold());
        coupon.setMount(couponDTO.getMount());
        coupon.setUpdateTime(date);
        coupon.setType(couponDTO.getType());

        return couponDao.update(coupon, updateWrapper)==1;
    }

    @Override
    public boolean deleteCouponById(CouponQueryDTO couponQueryDTO) {
        UpdateWrapper<Coupon> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("coupon_id",couponQueryDTO.getCouponId()).set("status", 1);

        return couponDao.update(null, updateWrapper)==1;
    }

    @Override
    public boolean batchDeleteCouponById(List<CouponQueryDTO> idList) {
        for(CouponQueryDTO couponQueryDTO:idList){
            UpdateWrapper<Coupon> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("coupon_id",couponQueryDTO.getCouponId()).set("status", 1);
            if(couponDao.update(null, updateWrapper)==0)
                return false;
        }
        return true;
    }

    @Override
    public Coupon queryCoupon(CouponQueryDTO couponQueryDTO) {
        return couponDao.selectById(couponQueryDTO.getCouponId());
    }

    /*
     * 分页查询
     */
    @Override
    public Page<Coupon> QueryAllPageCoupon(int page, int size) {
        Page<Coupon> pages = new Page<>(page, size);
        return couponDao.selectPage(pages,new QueryWrapper<Coupon>());
    }



}
